{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入必要的工具包\n",
    "# 数据读取及基本处理\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "#模型\n",
    "from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV\n",
    "\n",
    "#模型评估\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import r2_score  #评价回归预测模型的性能\n",
    "\n",
    "#可视化\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5  ...   weekday_5  weekday_6      temp     atemp       hum  \\\n",
       "0       0       0  ...           0          1  0.355170  0.373517  0.828620   \n",
       "1       0       0  ...           0          0  0.379232  0.360541  0.715771   \n",
       "2       0       0  ...           0          0  0.171000  0.144830  0.449638   \n",
       "3       0       0  ...           0          0  0.175530  0.174649  0.607131   \n",
       "4       0       0  ...           0          0  0.209120  0.197158  0.449313   \n",
       "\n",
       "   windspeed  holiday  workingday  yr   cnt  \n",
       "0   0.284606        0           0   0   985  \n",
       "1   0.466215        0           0   0   801  \n",
       "2   0.465740        0           1   0  1349  \n",
       "3   0.284297        0           1   0  1562  \n",
       "4   0.339143        0           1   0  1600  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读入数据\n",
    "data = pd.read_csv(\"FE_day.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:595: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\validation.py:595: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n"
     ]
    }
   ],
   "source": [
    "# get labels\n",
    "y = data['cnt']   \n",
    "X = data.drop(['cnt'], axis=1)\n",
    "\n",
    "#对y做标准化不是必须\n",
    "#对y标准化的好处是不同问题的w差异不太大，同时正则参数的范围也有限\n",
    "#ss_y需要保存，生产提交结果时反变换还需要\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "ss_y = StandardScaler()\n",
    "y = ss_y.fit_transform(y.values.reshape(-1, 1))\n",
    "y = y.flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train samples: (584, 34)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2179: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 用train_test_split 分割训练数据和测试数据\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.8,random_state = 0)\n",
    "\n",
    "print(\"train samples:\" ,X_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py:3697: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  errors=errors)\n"
     ]
    }
   ],
   "source": [
    "testID = X_test['instant']\n",
    "\n",
    "#ID不参与预测\n",
    "X_train.drop(['instant'], axis=1, inplace = True)\n",
    "X_test.drop(['instant'], axis=1, inplace = True)\n",
    "\n",
    "#保存特征名字以备后用（可视化）\n",
    "feat_names = X_train.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE on Training set : 0.3891686321282324\n",
      "RMSE on Test set : 0.4053988320844145\n",
      "r2_score on Training set : 0.8432073841581803\n",
      "r2_score on Test set : 0.855184663467164\n"
     ]
    }
   ],
   "source": [
    "# Linear Regression\n",
    "# 1. 生成学习器实例\n",
    "lr = LinearRegression()\n",
    "\n",
    "#2. 在训练集上训练学习器\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "#3.用训练好的学习器对训练集/测试集进行预测\n",
    "y_train_pred = lr.predict(X_train)\n",
    "y_test_pred = lr.predict(X_test)\n",
    "\n",
    "\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"RMSE on Training set :\", rmse_train)\n",
    "print(\"RMSE on Test set :\", rmse_test)\n",
    "\n",
    "r2_score_train = r2_score(y_train,y_train_pred)\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"r2_score on Training set :\", r2_score_train)\n",
    "print(\"r2_score on Test set :\", r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridge picked 33 features and eliminated the other 0 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot important coefficients\n",
    "coefs = pd.Series(lr.coef_, index = feat_names)\n",
    "print(\"Ridge picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "      str(sum(coefs == 0)) + \" features\")\n",
    "\n",
    "#正系数值最大的10个特征和负系数值最小（绝对值大）的10个特征\n",
    "imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                     coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the OLS Model\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 1.0\n",
      "cv of rmse : [0.41582484 0.41379631 0.41219016 0.42469386 0.55687265 0.86786002]\n",
      "RMSE on Training set : 0.3895046916344996\n",
      "RMSE on Test set : 0.40135389084220835\n",
      "r2_score on Training set : 0.8429364764067704\n",
      "r2_score on Test set : 0.8580600896876702\n"
     ]
    }
   ],
   "source": [
    "#RidgeCV缺省的score是mean squared errors \n",
    "# 1. 设置超参数搜索范围，生成学习器实例\n",
    "# RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False, scoring=None, cv=None, gcv_mode=None, store_cv_values=False)\n",
    "alphas = [0.01, 0.1, 1, 10, 100, 1000]\n",
    "ridge = RidgeCV(alphas = alphas,store_cv_values=True )\n",
    "\n",
    "# 2. 用训练数据度模型进行训练\n",
    "# RidgeCV采用的是广义交叉验证（Generalized Cross-Validation），留一交叉验证（N-折交叉验证）的一种有效实现方式\n",
    "ridge.fit(X_train, y_train)\n",
    "\n",
    "#通过交叉验证得到的最佳超参数alpha\n",
    "alpha = ridge.alpha_\n",
    "print(\"Best alpha :\", alpha)\n",
    "\n",
    "# 交叉验证估计的测试误差\n",
    "mse_cv = np.mean(ridge.cv_values_, axis = 0)\n",
    "rmse_cv = np.sqrt(mse_cv)\n",
    "print(\"cv of rmse :\",rmse_cv)\n",
    "\n",
    "#训练上测试，训练误差，实际任务中这一步不需要\n",
    "y_train_pred = ridge.predict(X_train)\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "\n",
    "y_test_pred = ridge.predict(X_test)\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "\n",
    "print(\"RMSE on Training set :\", rmse_train)\n",
    "print(\"RMSE on Test set :\" ,rmse_test)\n",
    "\n",
    "r2_score_train = r2_score(y_train,y_train_pred)\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"r2_score on Training set :\" ,r2_score_train)\n",
    "print(\"r2_score on Test set :\" ,r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridge picked 33 features and eliminated the other 0 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot important coefficients\n",
    "weight = lr.coef_.flatten().T\n",
    "coefs = pd.Series(list(weight), index = feat_names)\n",
    "coefs = pd.Series(ridge.coef_, index = feat_names)\n",
    "print(\"Ridge picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "      str(sum(coefs == 0)) + \" features\")\n",
    "\n",
    "#正系数值最大的10个特征和负系数值最小（绝对值大）的10个特征\n",
    "imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                     coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the Ridge Model\")\n",
    "plt.show()\n",
    "\n",
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "season_1       -0.422001\n",
       "season_2        0.031737\n",
       "season_3        0.050171\n",
       "season_4        0.340094\n",
       "mnth_1         -0.198671\n",
       "mnth_2         -0.131929\n",
       "mnth_3          0.095850\n",
       "mnth_4         -0.003106\n",
       "mnth_5          0.226007\n",
       "mnth_6          0.053810\n",
       "mnth_7         -0.159091\n",
       "mnth_8          0.066818\n",
       "mnth_9          0.346508\n",
       "mnth_10         0.121637\n",
       "mnth_11        -0.221136\n",
       "mnth_12        -0.196697\n",
       "weathersit_1    0.391182\n",
       "weathersit_2    0.176635\n",
       "weathersit_3   -0.567818\n",
       "weekday_0      -0.086224\n",
       "weekday_1      -0.080506\n",
       "weekday_2      -0.024855\n",
       "weekday_3      -0.002459\n",
       "weekday_4       0.033213\n",
       "weekday_5       0.045171\n",
       "weekday_6       0.115660\n",
       "temp            0.977490\n",
       "atemp           0.829258\n",
       "hum            -0.785552\n",
       "windspeed      -0.690416\n",
       "holiday        -0.104650\n",
       "workingday      0.075214\n",
       "yr              1.008494\n",
       "dtype: float64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coefs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2053: FutureWarning: You should specify a value for 'cv' instead of relying on the default value. The default value will change from 3 to 5 in version 0.22.\n",
      "  warnings.warn(CV_WARNING, FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 0.0012069167394253683\n",
      "cv of rmse : 0.42799785980851723\n",
      "Lasso picked 27 features and eliminated the other 6 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xt4VfWd7/H3NzcSAoRAAoYkXBREUVA0ohVbbdWK2pGx2qq1p2ovnOkZp51x2lM7dmyPc/pMtT3tzHSsHdux7UynQ711ipVKvdbaI0qQ+z2GS0KAhJAEyIVc9nf+2DthEwPZQFb27fN6nv1krbV/e+/vYof1yfqttX7L3B0RERGAjHgXICIiiUOhICIifRQKIiLSR6EgIiJ9FAoiItJHoSAiIn0CCwUze8LM6s1s/XGeNzP7JzOrMrO1ZnZRULWIiEhsgtxT+Cmw4ATPXw/MiDwWAY8FWIuIiMQgsFBw99eBAydoshD4Nw9bDow1s5Kg6hERkcFlxfGzS4GaqPnayLI9J3pRUVGRT506NcCyRERSz8qVK/e7e/Fg7eIZCjbAsgHH3DCzRYS7mJg8eTKVlZVB1iUiknLMbGcs7eJ59lEtUB41XwbUDdTQ3R939wp3ryguHjToRETkFMUzFJYAn4qchXQZ0OLuJ+w6EhGRYAXWfWRm/wlcBRSZWS3wdSAbwN1/CCwFbgCqgDbgnqBqERGR2AQWCu5+xyDPO/DnQX2+iIicPF3RLCIifRQKIiLSR6EgIiJ9FAoiIgkuFHK++fxG1u9uCfyzFAoiIgluTW0zP/rDdrbuOxT4ZykUREQS3Asb9pKVYVx97sTAP0uhICKSwNydZev3cvn0IgrysgP/PIWCiEgC27LvEDsa21hw3hnD8nkKBRGRBPbC+r2YwbWzgu86AoWCiEhCe2H9Xi6ZMo7i0SOG5fMUCiIiCWrH/lY27z3EdecPT9cRKBRERBLWCxv2ArBAoSAiIi+s38ucsgJKx+YN22cqFEREEtCelnZW1zRz3TCdddRLoSAikoCeXxu+59gNs0uG9XMVCiIiCei5NXXMLi1gWlH+sH6uQkFEJMHsbGxlTW0Lf3LB8O4lQMChYGYLzGyLmVWZ2f0DPD/FzF42s7Vm9pqZlQVZj4hIMnhuTR0AH5kzadg/O7BQMLNM4FHgemAWcIeZzerX7DvAv7n7HOAh4O+DqkdEJFk8t2YPl0wtZNIwnnXUK8g9hXlAlbtXu3snsBhY2K/NLODlyPSrAzwvIpJWtuw9xJZ9h/iTC4Z/LwGCDYVSoCZqvjayLNoa4JbI9M3AaDMb3/+NzGyRmVWaWWVDQ0MgxYqIJILn1tSRYXD9+cN/PAGCDQUbYJn3m/8ScKWZrQKuBHYD3e95kfvj7l7h7hXFxcVDX6mISAJwd55bW8f86UXDNtZRf1kBvnctUB41XwbURTdw9zrgowBmNgq4xd2Dv9+ciEgCWr/7IDsb2/hfV50VtxqC3FNYAcwws2lmlgPcDiyJbmBmRWbWW8NXgScCrEdEJKG9tGlfZJjs4b2KOVpgoeDu3cC9wDJgE/Cku28ws4fM7KZIs6uALWa2FZgIfDOoekREEt0rm+u5aHIh4/Jz4lZDkN1HuPtSYGm/ZQ9GTT8NPB1kDSIiyaD+YAfrdrfw5etmxrUOXdEsIpIAXtsSPrPygzMnxLUOhYKISAJ4efM+SgpyObdkdFzrUCiIiMTZke4e3ti2nw+eMwGzgc7mHz4KBRGROFuxvYnWzh4+FOeuI1AoiIjE3cub9zEiK4P504viXYpCQUQk3l7dXM/7zhpPXk5mvEtRKIiIxFN1w2F2NLbxoXPi33UECgURkbhaXn0AgA/MSIxx3RQKIiJxtG53MwV52UwZPzLepQAKBRGRuFpb28KcsoK4n4raS6EgIhInHV09bNl7iNmlBfEupY9CQUQkTjbvPUR3yJlTplAQEUl7a2ubAZhdNjbOlRylUBARiZO1tS0UjcphUkFuvEvpo1AQEYmTdbUtzC5NnIPMoFAQEYmLts5uttUfSqiuIwg4FMxsgZltMbMqM7t/gOcnm9mrZrbKzNaa2Q1B1iMikig21h0k5DAngc48ggBDwcwygUeB64FZwB1mNqtfs68Rvk3nXML3cP5BUPWIiCSStbUtAMxOoDOPINg9hXlAlbtXu3snsBhY2K+NA2Mi0wVAXYD1iIgkjHW7W5g4ZgQTxyTOQWYI9h7NpUBN1HwtcGm/Nt8AfmdmfwHkA9cEWI+ISMJYU9vM7NLEOp4Awe4pDHQ43fvN3wH81N3LgBuAfzez99RkZovMrNLMKhsaGgIoVURk+Bzq6KK6oTWhLlrrFWQo1ALlUfNlvLd76DPAkwDu/iaQC7znLhPu/ri7V7h7RXFxYowkKCJyqtbvPgiQdqGwAphhZtPMLIfwgeQl/drsAq4GMLNzCYeCdgVEJKX1XcmcYGceQYCh4O7dwL3AMmAT4bOMNpjZQ2Z2U6TZXwOfM7M1wH8Cd7t7/y4mEZGUsmpXM1PGj2T8qBHxLuU9gjzQjLsvBZb2W/Zg1PRGYH6QNYiIJBJ3551dTbzvrPHxLmVAuqJZRGQY7WnpoP7QEeaWJ96ZR6BQEBEZVqtrwscT5k4ujHMlA1MoiIgMo1W7msjJyuDckjGDN44DhYKIyDBatauZ8yeNIScrMTe/iVmViEgK6uoJsW53S8J2HYFCQURk2Gzec4gj3SHmTk7Mg8ygUBARGTarapqAxD3IDAoFEZFhs2pXM8WjRyTU7Tf7UyiIiAyT1TXNzC0fm1C33+xPoSAiMgyaWjvZvr81obuOQKEgIjIsjl60lrgHmUGhICIyLFbubCIzwxJyZNRoCgURkWGwvLqR2aUF5I8IdBzS06ZQEBEJWFtnN2tqm7nszMQcGTWaQkFEJGDv7Gymq8e57Mxx8S5lUAoFEZGAvVm9n8wMo2JqmoeCmS0wsy1mVmVm9w/w/PfMbHXksdXMmoOsR0QkHpZXH2BOWQGjEvx4AgR45zUzywQeBa4FaoEVZrYkcrc1ANz9r6La/wUwN6h6RETioa2zmzU1zXzuA2fGu5SYBLmnMA+ocvdqd+8EFgMLT9D+DsL3aRYRSRkrdzbRHfKkOMgMwYZCKVATNV8bWfYeZjYFmAa8EmA9IiLDbnl1Y/h4wpTEvpK5V5ChMNDgHn6ctrcDT7t7z4BvZLbIzCrNrLKhoWHIChQRCVrv8YREvz6hV5ChUAuUR82XAXXHaXs7J+g6cvfH3b3C3SuKi4uHsEQRkeC0HgkfT0iWriMINhRWADPMbJqZ5RDe8C/p38jMZgKFwJsB1iIiMuyS7XgCBBgK7t4N3AssAzYBT7r7BjN7yMxuimp6B7DY3Y/XtSQikpTerG4kK4mOJ0CAp6QCuPtSYGm/ZQ/2m/9GkDWIiMTLa1sauHhKYdIcTwBd0SwiEoi9LR1s2nOQq2ZOiHcpJ0WhICISgN9vrQfgg+ck18kxCgURkQC8urmBkoJcZk4cHe9STopCQURkiHV2h3ijaj9XzZyQ0PdjHohCQURkiK3c2cThI91cNTO5uo5AoSAiMuRe21JPdqYxf3pRvEs5aQoFEZEh9uqWeuZNG5cUQ2X3p1AQERlCu5vb2brvMB9MslNReykURESG0GtbwqeiJuPxBFAoiIgMqZc27qN8XB5nFY+KdymnRKEgIjJEWtq7eKNqP9efX5J0p6L2UiiIiAyRFzfuo6vHuWF2SbxLOWUKBRGRIbJ03R5Kx+ZxQVlBvEs5ZQoFEZEhcLCjiz9sa+D6889I2q4jUCiIiAyJl3q7juYkb9cRKBRERIbE0nV7mFSQy9zysfEu5bQoFERETtPBji5e37qfBUl81lGvQEPBzBaY2RYzqzKz+4/T5uNmttHMNpjZL4KsR0QkCK9sqqezJ8SNc86IdymnLbCBOcwsE3gUuBaoBVaY2RJ33xjVZgbwVWC+uzeZWXJeFy4iae03a+s4Y0wuc8uT517MxxPznoKZXWFm90Smi81s2iAvmQdUuXu1u3cCi4GF/dp8DnjU3ZsA3L0+9tJFROKv/lAHr25pYOHcSWRkJHfXEcQYCmb2deArhP+qB8gGfj7Iy0qBmqj52siyaGcDZ5vZH81suZktOM7nLzKzSjOrbGhoiKVkEZFh8at3dtMTcj52cXm8SxkSse4p3AzcBLQCuHsdMNg95gaKTO83nwXMAK4C7gB+bGbvOXTv7o+7e4W7VxQXJ+cgUyKSetydp1bWctHksUyfkJxjHfUXayh0ursT2aibWX4Mr6kFoqOzDKgboM2v3b3L3bcDWwiHhIhIwltV00xV/WE+XpEaewkQeyg8aWb/Aow1s88BLwE/GuQ1K4AZZjbNzHKA24El/dr8F/BBADMrItydVB1r8SIi8fRUZS252RncmOQXrEWL6ewjd/+OmV0LHARmAg+6+4uDvKbbzO4FlgGZwBPuvsHMHgIq3X1J5LkPm9lGoAf4srs3nsb6iIgMi/bOHp5bU8cNs0sYnZsd73KGTEyhEOkuesXdXzSzmcBMM8t2964Tvc7dlwJL+y17MGragfsiDxGRpPHChj0cPtKdUl1HEHv30evACDMrJdx1dA/w06CKEhFJdIvfrmHyuJHMmzou3qUMqVhDwdy9Dfgo8H13vxmYFVxZIiKJa0NdC29tP8Cdl05OiWsTosUcCmb2PuBO4PnIssCuhhYRSWQ/+eMO8rIzuf2SyfEuZcjFGgpfBO4Hno0cLJ4GvBJcWSIiianh0BGWrK7j1ovLKBiZOgeYe8X6134bEALuMLNPEr4wrf+FaCIiKe8/3tpJZ0+Ie+ZPjXcpgYg1FP4D+BKwnnA4iIiknSPdPfx8+U4+dM4EzixOjSuY+4s1FBrc/blAKxERSXBLVtex/3Ann54/2HigySvWUPi6mf0YeBk40rvQ3Z8NpCoRkQTj7vzrG9s5e+Io5k8fH+9yAhNrKNwDnEN4dNTe7iMHFAoikhZe3lTP5r2H+M7HLkj6u6udSKyhcIG7zw60EhGRBOXu/POrVZSPy2PhhZPiXU6gYj0ldbmZ6WI1EUlLf6xqZHVNM3925VlkZ6b2re1j3VO4ArjLzLYTPqZghIcumhNYZSIiCeL7r2xj4pgR3HpxWbxLCVysoTDgHdFERFLd29sP8Nb2Azz4kVmMyMqMdzmBi3Xo7J1BFyIikoi+/8o2xufncMe81BvSYiCp3TkmInIa3qpu5A/b9vO5D5xJXk7q7yWAQkFEZEDuziPLtjBxzAjuet/UeJczbAINBTNbYGZbzKzKzO4f4Pm7zazBzFZHHp8Nsh4RkVi9vKmelTub+OLVZ6fNXgIEOPy1mWUCjwLXArXACjNb4u4b+zX9pbvfG1QdIiInqyfkfHvZFqYV5fOxitQ/4yhakHsK84Aqd692905gMbAwwM8TERkSv169my37DnHftWen/HUJ/QW5tqVATdR8bWRZf7eY2Voze9rMUutmpyKSdDq6evjui1s5b9IYbpxdEu9yhl2QoTDQ4CD978HwHDA1chHcS8DPBnwjs0VmVmlmlQ0NDUNcpojIUf/y+2pqm9r5mxvOTblbbcYiyFCoBaL/8i8D6qIbuHuju/eOuvoj4OKB3sjdH3f3CnevKC4uDqRYEZFdjW384LUqPjKnhPnTi+JdTlwEGQorgBlmNs3McoDbgSXRDcwset/sJmBTgPWIiJzQQ7/ZQGaG8bUb03eot8DOPnL3bjO7F1gGZAJPRO7v/BBQ6e5LgC+Y2U1AN3AAuDuoekRETuSljft4aVM9X73+HM4oyI13OXFj7sl1q+WKigqvrKyMdxkikkLaOru57h9eZ0RWJku/8H5yslLvjCMzW+nuFYO1C2xPQUQkWfz90s3UHGhn8aLLUjIQTkZ6r72IpL3fb23g35fv5DNXTOOyM1P3NpuxUiiISNpqbuvky0+tYcaEUXz5upnxLichqPtIRNLW3/56AwdaO3ni7kvIzU6f8Y1ORHsKIpKWfr16N8+tqeOLV8/g/NKCeJeTMBQKIpJ2ag608bVfrefiKYV8/qqz4l1OQlEoiEha6Qk59z25Ggf+4bYLyUqzAe8Go2MKIpJWHnutihU7mvjuxy+gfNzIeJeTcBSRIpI21u9u4R9e2sZH5pRw89yBBm0WhYKIpIXunhBfeWYthfk5fPNPZ2OWfiOgxkLdRyKSFn78xnY21B3ksTsvomBkdrzLSVjaUxCRlLdjfyvfe3ErH541kQXnnxHvchKaQkFEUpq789Vn15GTmcFDC89Xt9EgFAoiktKerKzhzepGvpLmQ2LHSqEgIilr38EO/u/zm5g3bRyfmDc53uUkBYWCiKQkd+eBX62nszvEw7fMScv7LZ+KQEPBzBaY2RYzqzKz+0/Q7lYzczMb9AYQIiKxeH7dHl7atI/7rj2baUX58S4naQQWCmaWCTwKXA/MAu4ws/fc+NTMRgNfAN4KqhYRSS9NrZ18/dcbmFNWwGeumBbvcpJKkHsK84Aqd692905gMbBwgHZ/BzwCdARYi4ikkUeWbaalvYuHb5mjsY1OUpD/WqVATdR8bWRZHzObC5S7+28CrENE0sja2mYWr6jh7suncm7JmHiXk3SCDIWBjup435NmGcD3gL8e9I3MFplZpZlVNjQ0DGGJIpJKQiHnwV9vYHz+CL54zYx4l5OUggyFWqA8ar4MqIuaHw2cD7xmZjuAy4AlAx1sdvfH3b3C3SuKi4sDLFlEktkz79SyuqaZr15/DqNzNZTFqQgyFFYAM8xsmpnlALcDS3qfdPcWdy9y96nuPhVYDtzk7pUB1iQiKepgRxcPv7CZiyaP1QiopyGwUHD3buBeYBmwCXjS3TeY2UNmdlNQnysi6elbv91MY2snDy08X9cknIZAR0l196XA0n7LHjxO26uCrEVEUtcftjXwi7d2segDZ+p+y6dJ52qJSFI72NHFV55ey5nF+dx37dnxLifp6X4KIpLUvvmbTew92MHTn7+c3OzMeJeT9LSnICJJ67Ut9fyysoZFHziLiyYXxruclKBQEJGkdKiji795dh3TJ4ziL3VNwpBR95GIJKVHXtjCnoMdPP1n6jYaStpTEJGk8/b2A/z78p3cc/k0Lp6ibqOhpFAQkaTS0dXDV55ZS1lhHl+6TmcbDTV1H4lIUvnui1vZvr+Vn3/mUkbmaBM21LSnICJJ4/dbG3j89WruvHQyV8woinc5KUmhICJJof5gB/f9cjUzJ47mbz/ynvt1yRDRvpeIJLxQyLnvyTW0dnaz+BOX6WyjACkURCTh/eC1Kt6o2s+3PjqbGRNHx7uclKbuIxFJaC+s38t3freVhRdO4rZLygd/gZwWhYKIJKz1u1v4q1+u5sLysTx8yxzMNCR20BQKIpKQ9h3s4LM/q6RwZDaPf+piHUcYJjqmICIJp7mtk7t/soKDHV088/nLmTA6N94lpQ3tKYhIQjnY0cVdT7zNu/WHeeyTF3NuyZh4l5RWAg0FM1tgZlvMrMrM7h/g+T8zs3VmttrM3jAznXwsksZaj3Rzz09WsKHuID+48yKuPLs43iWlncBCwcwygUeB64FZwB0DbPR/4e6z3f1C4BHgu0HVIyKJraW9i3t+soLVNc18/465XDNrYrxLSktB7inMA6rcvdrdO4HFwMLoBu5+MGo2H/AA6xGRBLW3pYOP//BNVtU08Y+3X8j1s0viXVLaCvJAcylQEzVfC1zav5GZ/TlwH5ADfGigNzKzRcAigMmTJw95oSISP1X1h/jUv77NwY5ufnrPPOZP15hG8RTknsJAJxS/Z0/A3R9197OArwBfG+iN3P1xd69w94riYvUxiqSKlzbu4+Yf/H+6Qs4v/+dlCoQEEOSeQi0QfflhGVB3gvaLgccCrEdEEkRPyPnei1v551ermF1awGOfvIiywpHxLksINhRWADPMbBqwG7gd+ER0AzOb4e7bIrM3AtsQkZS2p6WdLz21hj9WNXL7JeV846bzdGFaAgksFNy928zuBZYBmcAT7r7BzB4CKt19CXCvmV0DdAFNwF1B1SMi8eXuPPvObr7x3Aa6e5yHb5nNbZfoGGGiCfSKZndfCiztt+zBqOkvBvn5IpIYapva+MaSjby0aR+XTC3k27dewNSi/HiXJQPQMBciEpiOrh5++Pt3eey1d8kw44EbzuXTV0wjM0MD2yUqhYKIDLnunhDPrtrNP760jd3N7dw4p4QHbjiXSWPz4l2aDEKhICJDpqsnxJLVdfzTK9vY2djG7NICvv2xOVx+lk41TRYKBRE5bU2tnfzi7V3825s72HfwCOeWjOFHn6rgmnMn6B4ISUahICKnJBRyllc38tTKWpau28OR7hBXTC/i7z86m6vOnkCGjhskJYWCiJyU2qY2nlm5m6dW1lDb1M7o3CxuvbiMT71vKjPP0P2Tk51CQUQG1Xqkm99t3Muz7+zmjar9uMP86eP58nUzue68M3TxWQpRKIjIgNo7e/jDtgaeX7eH323YR3tXD6Vj8/ji1TO45aIyysdpWIpUpFAQkT41B9p4o2o/r26u5/VtDXR0hSjIy+bmi0q5eW4pF08u1LGCFKdQEElT7k5tUztvbz/Aih0HeLO6kZ2NbQCUFORyW0U5Hz7vDOZNG0d2pu7cmy4UCiJpYv/hI6ze1cza2mbW7W5h3e6D7D98BIAxuVlcMnUcd18+lffPKOKs4lE6lTRNKRREUtCR7h427TnEql1NrK5pZtWuZnYdCO8FZBjMmDCaK88u5oLyAi6ZOo6ZE0erW0gAhYJIUuvqCbGzsY13Gw5TVX+YrfsOsXnPId5tOEx3KHxPq4ljRnBh+VjuvHQyF00p5PxJBeTl6GwhGZhCQSSBuTtNbV3UNbezu7md2qZ2ag60saOxlR37W6lpaqcndPSGhqVj85h5xmg+dO4EZpcWMHfyWEoKNN6QxE6hIBJHHV097GxsY09LO3tbOqhr6WBPczt1Le3UNXewp6Wdjq7QMa/Jz8lkyvh8zptUwI1zSjireFT4MWEUo0bov7ScHv0GiQyDw0e6eTfSvbMt8vPdhsPUNrXjUXcuN4MJo0dQUpDHuSWjufqcCZSMzWNSQS7l40ZSVphHQV62DgJLYAINBTNbAPwj4Tuv/djdv9Xv+fuAzwLdQAPwaXffGWRNIkE52NFFzYE2dja2sX1/uHtnR2Mr2/e39Z3lA5CTlcFZxaO4sLyQWy8qZ1pxPqVjc5k4JpcJo3PJydLpnxI/gYWCmWUCjwLXArXACjNb4u4bo5qtAircvc3MPg88AtwWVE0ip6urJ8S7DYfZvOcQ1Q2H2d7Yxs7GVnY2ttHS3nVM2+LRI5g2Pp8PnVPM1KJ8ziwaxdkTRzF53EiydN6/JKgg9xTmAVXuXg1gZouBhUBfKLj7q1HtlwOfDLAekZh1dofY2dhKVX34rJ5tkce79Yfp7An38WcYlBWOZMr4kfzJBSWUF46kfNxIJo8bydSifPXvS1IK8re2FKiJmq8FLj1B+88Avw2wHpH3aG7rZEdjGzv2t0Y2/oeoqj/Mzsa2vlM6AcoK85g+YRQfOLuIWSVjOOeMMUwryldXj6ScIENhoCNhPsAyzOyTQAVw5XGeXwQsApg8efJQ1Sdp4FBHF3XNHdQcaKOmqY3apnZqm9rY3dxOzYH2Y7p8MjOMKeNHMr14FAvOP4PpE0YxvXg0Z03IZ2SO/uqX9BDkb3otUB41XwbU9W9kZtcADwBXuvuR/s8DuPvjwOMAFRUVAwaLpIfunhAHO7ppbuukub2LptZOGls7OdDaSePhIzQcOkJ95LG3pYPDR7qPeX1ediZlhXmUFeZxYflYpo7PDz+KRjJ5nP7yFwkyFFYAM8xsGrAbuB34RHQDM5sL/AuwwN3rA6yF+oPhc8AzDAzDLHz6X4bZ0Z8QWW59833PZ1jfazP62oSfzzDDMnqnj33P3mWpfAqhu9Mdcrp6QnT19P4M0dkdfhzpfXT1cKQ7REdXDx3dPXR0Raa7QrR3dtPe1UNbZ++jm9YjPRw60k3rkW4OdXRxqKObts6e49YxIiuDCWNGMGF0LtOLR/H+GUWUFORyRkEe5YV5lI8byfj8nJT+LkROV2Ch4O7dZnYvsIzwKalPuPsGM3sIqHT3JcC3gVHAU5H/qLvc/aYg6nl21W6+9dvNQbx1zDIzjgZEbwAdDaNjQ2ngoDoaaBmRDVt0sEW/T2/nXe+y/jxycnzfbpcfnXZ3Qg6O4w7uEHKnJ+SEIgHQ0+N0hUJ09/gxfe+nIzc7g/ycLEaOyGRkdhb5IzIpyMumdGwuo0ZkMSY3m9G52YzJy6JwZA4FI7MpHJnD+PwcxuXnMDInUxt8kdNk7snVG1NRUeGVlZUn/bqdja2823A4soELb+TCqx7ZAPYuI7xR9Kg2Ifeo6WPb9YRO0CaycQ25Ewodne5x79sIh0K97xW9ET66LBQ17VGf4YSfI2q6d/kxG/yor9dxLPpQjx3z42igwDHh1buXlGFGZsbRR3ZmBlkZRlZmBtkZRnZWeH5EVgbZmeFHTlYGI7LCP3OzMxmRlcGIrEzycjLJzc4gNzI9IitDG3SRAJnZSnevGKxd2hw9mzI+nynj8+NdhohIQtNRNRER6aNQEBGRPgoFERHpo1AQEZE+CgUREemjUBARkT4KBRER6aNQEBGRPkl3RbOZNQBDfXe2ImD/EL9nvKTKuqTKeoDWJRGlynpA7Osyxd2LB2uUdKEQBDOrjOXy72SQKuuSKusBWpdElCrrAUO/Luo+EhGRPgoFERHpo1AIezzeBQyhVFmXVFkP0LokolRZDxjiddExBRER6aM9BRER6ZOWoWBmf2dma81stZn9zswmHaddT6TNajNbMtx1xuIk1uUuM9sWedw13HUOxsy+bWabI+vyKzMbe5x2O8xsXWR9T/5uS8PgJNZlgZltMbMqM7t/uOuMhZl9zMw2mFnIzI57hkuify8nsR7J8J2MM7MXI/+XXzSzwuO0O7Xtl0fuEJZOD2BM1PQXgB8ep93heNc6FOsCjAOqIz8LI9OF8a69X40fBrIi0w8DDx+n3Q6gKN71nu66EL5F7bvAmUAOsAaYFe/aB6jzXGAm8BpQcYJ2Cf29xLIeSfSdPAJ8UGXNAAAFWklEQVTcH5m+/wT/V05p+5WWewrufjBqNp9jblqZXGJcl+uAF939gLs3AS8CC4ajvli5++/cvTsyuxwoi2c9pyPGdZkHVLl7tbt3AouBhcNVY6zcfZO7b4l3HacrxvVIiu+EcE0/i0z/DPjToXzztAwFADP7ppnVAHcCDx6nWa6ZVZrZcjMb0n/4oRTDupQCNVHztZFlierTwG+P85wDvzOzlWa2aBhrOlXHW5dk+04Gk2zfy0CS5TuZ6O57ACI/Jxyn3Sltv1L2Hs1m9hJwxgBPPeDuv3b3B4AHzOyrwL3A1wdoO9nd68zsTOAVM1vn7u8GWPaAhmBdbIDXDvve0WDrEWnzANAN/Mdx3mZ+5DuZALxoZpvd/fVgKj6+IViXhPhOILZ1iUHcv5chWI+k+E5O4m1OafuVsqHg7tfE2PQXwPMMEAruXhf5WW1mrwFzCfc5DqshWJda4Kqo+TLCfavDarD1iBwA/whwtUc6RQd4j97vpN7MfkV4l3/YQ2EI1qUWKI+aLwPqhq7C2J3E79eJ3iPu38sQrEdSfCdmts/MStx9j5mVAPXHeY9T2n6lZfeRmc2Imr0J2DxAm0IzGxGZLgLmAxuHp8LYxbIuwDLgw5F1KiR8IHTZcNQXKzNbAHwFuMnd247TJt/MRvdOE16P9cNXZWxiWRdgBTDDzKaZWQ5wO5CQZ7gNJlm+lxgky3eyBOg9g/Au4D17Qae1/Yr3kfR4PIBnCP/SrgWeA0ojyyuAH0emLwfWET4DYR3wmXjXfarrEpn/NFAVedwT77oHWI8qwv25qyOPH0aWTwKWRqbPjHwfa4ANhLsF4l77qaxLZP4GYCvhv94SdV1uJvwX9BFgH7AsGb+XWNYjib6T8cDLwLbIz3GR5UOy/dIVzSIi0ictu49ERGRgCgUREemjUBARkT4KBRER6aNQEBGRPgoFSRtmdvg0X/905OrQE7V57USjcMbapl/7YjN7Idb2IqdDoSASAzM7D8h09+rh/mx3bwD2mNn84f5sST8KBUk7FvZtM1sfuQfAbZHlGWb2g8i4+78xs6VmdmvkZXcSdeWomT0WGWxsg5n9n+N8zmEz+39m9o6ZvWxmxVFPf8zM3jazrWb2/kj7qWb2h0j7d8zs8qj2/xWpQSRQCgVJRx8FLgQuAK4Bvh0ZQ+ajwFRgNvBZ4H1Rr5kPrIyaf8DdK4A5wJVmNmeAz8kH3nH3i4Dfc+yYVFnuPg/4y6jl9cC1kfa3Af8U1b4SeP/Jr6rIyUnZAfFETuAK4D/dvQfYZ2a/By6JLH/K3UPAXjN7Neo1JUBD1PzHI0NEZ0Wem0V4qJFoIeCXkemfA89GPdc7vZJwEAFkA/9sZhcCPcDZUe3rCQ/JIBIohYKko4GGSD7RcoB2IBfAzKYBXwIucfcmM/tp73ODiB5T5kjkZw9H/x/+FeFxeS4gvBffEdU+N1KDSKDUfSTp6HXgNjPLjPTzfwB4G3gDuCVybGEixw43vgmYHpkeA7QCLZF21x/nczKA3mMSn4i8/4kUAHsieyr/g/DtIXudTXKOPCpJRnsKko5+Rfh4wRrCf73/b3ffa2bPAFcT3vhuBd4CWiKveZ5wSLzk7mvMbBXhEUGrgT8e53NagfPMbGXkfW4bpK4fAM+Y2ceAVyOv7/XBSA0igdIoqSJRzGyUux82s/GE9x7mRwIjj/CGen7kWEQs73XY3UcNUV2vAws9fI9tkcBoT0HkWL8xs7FADvB37r4XwN3bzezrhO/Zu2s4C4p0cX1XgSDDQXsKIiLSRweaRUSkj0JBRET6KBRERKSPQkFERPooFEREpI9CQURE+vw39x4Vf5tXefUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE on Training set : 0.3896229657546962\n",
      "RMSE on Test set : 0.4063374994232403\n",
      "r2_score on Training set : 0.8428410764237866\n",
      "r2_score on Test set : 0.8545132713117076\n"
     ]
    }
   ],
   "source": [
    "# 3* Lasso\n",
    "#1. 生成学习器实例，LassoCV默认参数可自动确定alpha的搜素范围\n",
    "lasso = LassoCV()\n",
    "\n",
    "#2.模型训练\n",
    "lasso.fit(X_train, y_train)\n",
    "alpha = lasso.alpha_\n",
    "print(\"Best alpha :\" , alpha)\n",
    "\n",
    "#3. 模型性能：cv\n",
    "mse_cv = np.mean(lasso.mse_path_, axis = 1)\n",
    "rmse_cv = np.sqrt(mse_cv)\n",
    "print(\"cv of rmse :\", min(rmse_cv))\n",
    "\n",
    "# 4. 特征重要性\n",
    "#Plot important coefficients\n",
    "coefs = pd.Series(lasso.coef_, index = feat_names)\n",
    "print(\"Lasso picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "      str(sum(coefs == 0)) + \" features\")\n",
    "imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                     coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the Lasso Model\")\n",
    "plt.show()\n",
    "\n",
    "#5. 显示不同alpha对应的模型性能\n",
    "plt.plot(np.log10(lasso.alphas_), mse_cv) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show() \n",
    "\n",
    "#训练误差\n",
    "y_train_pred = lasso.predict(X_train)\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "print(\"RMSE on Training set :\" ,rmse_train)\n",
    "\n",
    "#测试误差\n",
    "y_test_pred = lasso.predict(X_test)\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"RMSE on Test set :\" ,rmse_test)\n",
    "\n",
    "r2_score_train = r2_score(y_train,y_train_pred)\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"r2_score on Training set :\" , r2_score_train)\n",
    "print(\"r2_score on Test set :\" , r2_score_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "season_1       -0.512357\n",
       "season_2       -0.000000\n",
       "season_3        0.000000\n",
       "season_4        0.231491\n",
       "mnth_1         -0.078702\n",
       "mnth_2         -0.024112\n",
       "mnth_3          0.140707\n",
       "mnth_4         -0.000000\n",
       "mnth_5          0.188145\n",
       "mnth_6          0.000000\n",
       "mnth_7         -0.204440\n",
       "mnth_8          0.005571\n",
       "mnth_9          0.331305\n",
       "mnth_10         0.182090\n",
       "mnth_11        -0.108358\n",
       "mnth_12        -0.079312\n",
       "weathersit_1    0.200497\n",
       "weathersit_2   -0.000000\n",
       "weathersit_3   -0.738619\n",
       "weekday_0      -0.141341\n",
       "weekday_1      -0.069356\n",
       "weekday_2      -0.011756\n",
       "weekday_3      -0.000000\n",
       "weekday_4       0.024312\n",
       "weekday_5       0.039942\n",
       "weekday_6       0.042472\n",
       "temp            1.531392\n",
       "atemp           0.446259\n",
       "hum            -0.836293\n",
       "windspeed      -0.713962\n",
       "holiday        -0.155788\n",
       "workingday      0.000718\n",
       "yr              1.002915\n",
       "dtype: float64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "coefs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_test_pred = ridge.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.03089798,  0.10834997, -1.5926679 , -1.77426921, -0.44036681,\n",
       "       -1.4647203 , -0.31223198,  0.65651016,  0.7532931 , -1.83967809,\n",
       "       -1.57577263, -1.71422556, -1.69101713,  0.16168839,  0.10579351,\n",
       "       -0.33658084,  1.15128245,  0.74256847, -0.61942159, -0.92832745,\n",
       "        1.41883294, -0.72156948,  0.31103451, -0.09356889, -1.26542205,\n",
       "        0.75855101,  0.50210203,  0.2535162 ,  1.32352523,  1.02780116,\n",
       "       -2.07750251,  0.45445206,  0.64118456,  0.27802347, -1.37701084,\n",
       "       -0.29520552,  1.07165508,  1.51094989, -0.85059155, -0.83379598,\n",
       "        0.68307276, -1.80937999,  0.56098671, -0.42945272,  1.25064698,\n",
       "        1.46252789, -0.76703295, -0.24276303, -0.62859612, -1.05344098,\n",
       "        1.06269397,  0.99093532,  0.37645123,  0.87235074, -0.09288723,\n",
       "       -0.57303067, -0.75471952,  1.08445966,  0.97153924, -0.28500484,\n",
       "        0.78636861, -0.1238979 ,  0.60187342,  1.34229884,  1.07445316,\n",
       "       -0.84593392,  0.47061237,  0.11773177,  1.25035233,  0.58152244,\n",
       "        0.83343859,  1.02583399,  0.01897923,  0.87334692, -0.18359322,\n",
       "        0.65217028,  0.37612934,  1.28491938, -0.90010024, -0.82194797,\n",
       "        0.36339622,  0.31172219,  0.33556169, -1.43772115,  0.22762713,\n",
       "        1.11846935,  0.43199581,  0.97162347, -0.42177935, -0.33697799,\n",
       "       -1.89842649, -1.4554186 ,  1.27351927,  1.12514893,  0.6030888 ,\n",
       "       -0.91227927, -1.83659236,  1.40355288,  0.08272856, -0.35894605,\n",
       "       -0.08501802,  0.58919718,  0.11929659,  1.14034124, -0.61067179,\n",
       "        0.15809607,  1.44952612,  1.40208606,  0.11812228, -1.58100908,\n",
       "       -0.69123363, -0.1758808 ,  0.0223951 , -1.19979026, -1.68903734,\n",
       "        0.12553437,  0.31968837, -0.37222481,  0.98732597,  0.37434668,\n",
       "       -1.35850082,  0.20882495, -0.83494891, -0.47144301, -0.48735054,\n",
       "        0.25613757, -1.77708897,  0.56763025, -0.62790199, -0.52712926,\n",
       "       -1.82390607,  1.03178703, -1.62403006, -0.01468539, -0.40914155,\n",
       "        0.30147918,  0.78410721, -0.15072768,  0.36916937,  0.35083152,\n",
       "        0.42779607, -0.19888701,  0.50469078,  0.14257598,  0.3330679 ,\n",
       "        1.44204323, -0.08980429])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "#y_test_pred = ridge.predict(X_test)\n",
    "\n",
    "#对模型预测结果进行标准化变换的反变换\n",
    "mean = ss_y.mean_\n",
    "scale = ss_y.scale_\n",
    "y_test_pred = y_test_pred*scale + mean\n",
    "\n",
    "#生成提交测试结果\n",
    "df = pd.DataFrame({\"instant\":testID, 'cnt':y_test_pred})\n",
    "df.to_csv('submission2.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>197</td>\n",
       "      <td>4444.533866</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>187</th>\n",
       "      <td>188</td>\n",
       "      <td>4714.102025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>15</td>\n",
       "      <td>1421.125422</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>32</td>\n",
       "      <td>1069.565993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>390</th>\n",
       "      <td>391</td>\n",
       "      <td>3651.848907</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>319</th>\n",
       "      <td>320</td>\n",
       "      <td>1668.817376</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>300</td>\n",
       "      <td>3899.903336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>702</th>\n",
       "      <td>703</td>\n",
       "      <td>5775.277635</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>462</th>\n",
       "      <td>463</td>\n",
       "      <td>5962.638371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28</td>\n",
       "      <td>942.941863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>41</td>\n",
       "      <td>1453.832735</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>360</th>\n",
       "      <td>361</td>\n",
       "      <td>1185.803650</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>56</td>\n",
       "      <td>1230.732523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>157</th>\n",
       "      <td>158</td>\n",
       "      <td>4817.359123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>193</th>\n",
       "      <td>194</td>\n",
       "      <td>4709.153005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>170</th>\n",
       "      <td>171</td>\n",
       "      <td>3852.766707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>618</th>\n",
       "      <td>619</td>\n",
       "      <td>6733.100366</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>679</th>\n",
       "      <td>680</td>\n",
       "      <td>5941.876706</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>382</th>\n",
       "      <td>383</td>\n",
       "      <td>3305.219278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>79</th>\n",
       "      <td>80</td>\n",
       "      <td>2707.212759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>607</th>\n",
       "      <td>608</td>\n",
       "      <td>7251.047599</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>728</th>\n",
       "      <td>729</td>\n",
       "      <td>3107.472612</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>674</th>\n",
       "      <td>675</td>\n",
       "      <td>5106.476176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>162</th>\n",
       "      <td>163</td>\n",
       "      <td>4323.210141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>386</th>\n",
       "      <td>387</td>\n",
       "      <td>2054.636072</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>596</th>\n",
       "      <td>597</td>\n",
       "      <td>5972.817092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>202</th>\n",
       "      <td>203</td>\n",
       "      <td>5476.361105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>242</th>\n",
       "      <td>243</td>\n",
       "      <td>4995.127286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>631</th>\n",
       "      <td>632</td>\n",
       "      <td>7066.542738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>518</th>\n",
       "      <td>519</td>\n",
       "      <td>6494.054663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>122</th>\n",
       "      <td>123</td>\n",
       "      <td>3783.764059</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>663</th>\n",
       "      <td>664</td>\n",
       "      <td>6415.699312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>457</th>\n",
       "      <td>458</td>\n",
       "      <td>5229.041309</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>38</td>\n",
       "      <td>1874.446169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>172</th>\n",
       "      <td>173</td>\n",
       "      <td>4908.610121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>49</td>\n",
       "      <td>2887.982974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>366</td>\n",
       "      <td>3591.688926</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>318</th>\n",
       "      <td>319</td>\n",
       "      <td>3560.893779</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>268</th>\n",
       "      <td>269</td>\n",
       "      <td>5000.201967</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>19</td>\n",
       "      <td>1064.107261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>521</th>\n",
       "      <td>522</td>\n",
       "      <td>5603.216269</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>416</td>\n",
       "      <td>3288.802192</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>77</td>\n",
       "      <td>3483.886715</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>65</td>\n",
       "      <td>973.474698</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>582</th>\n",
       "      <td>583</td>\n",
       "      <td>6501.770857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>53</td>\n",
       "      <td>1360.411842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>293</th>\n",
       "      <td>294</td>\n",
       "      <td>4475.919602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389</th>\n",
       "      <td>390</td>\n",
       "      <td>3712.297464</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>443</th>\n",
       "      <td>444</td>\n",
       "      <td>5087.978151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>470</th>\n",
       "      <td>471</td>\n",
       "      <td>6022.290978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>261</th>\n",
       "      <td>262</td>\n",
       "      <td>4212.557246</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>279</th>\n",
       "      <td>280</td>\n",
       "      <td>5219.018637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>252</th>\n",
       "      <td>253</td>\n",
       "      <td>5183.518652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>483</th>\n",
       "      <td>484</td>\n",
       "      <td>5332.513237</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>118</th>\n",
       "      <td>119</td>\n",
       "      <td>4119.326262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>566</th>\n",
       "      <td>567</td>\n",
       "      <td>5481.372628</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>688</th>\n",
       "      <td>689</td>\n",
       "      <td>4780.359670</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>266</th>\n",
       "      <td>267</td>\n",
       "      <td>5149.130305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>504</th>\n",
       "      <td>505</td>\n",
       "      <td>7295.980083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>239</th>\n",
       "      <td>240</td>\n",
       "      <td>4330.497972</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>147 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     instant          cnt\n",
       "196      197  4444.533866\n",
       "187      188  4714.102025\n",
       "14        15  1421.125422\n",
       "31        32  1069.565993\n",
       "390      391  3651.848907\n",
       "319      320  1668.817376\n",
       "299      300  3899.903336\n",
       "702      703  5775.277635\n",
       "462      463  5962.638371\n",
       "27        28   942.941863\n",
       "40        41  1453.832735\n",
       "360      361  1185.803650\n",
       "55        56  1230.732523\n",
       "157      158  4817.359123\n",
       "193      194  4709.153005\n",
       "170      171  3852.766707\n",
       "618      619  6733.100366\n",
       "679      680  5941.876706\n",
       "382      383  3305.219278\n",
       "79        80  2707.212759\n",
       "607      608  7251.047599\n",
       "728      729  3107.472612\n",
       "674      675  5106.476176\n",
       "162      163  4323.210141\n",
       "386      387  2054.636072\n",
       "596      597  5972.817092\n",
       "202      203  5476.361105\n",
       "242      243  4995.127286\n",
       "631      632  7066.542738\n",
       "518      519  6494.054663\n",
       "..       ...          ...\n",
       "122      123  3783.764059\n",
       "663      664  6415.699312\n",
       "457      458  5229.041309\n",
       "37        38  1874.446169\n",
       "172      173  4908.610121\n",
       "48        49  2887.982974\n",
       "365      366  3591.688926\n",
       "318      319  3560.893779\n",
       "268      269  5000.201967\n",
       "18        19  1064.107261\n",
       "521      522  5603.216269\n",
       "415      416  3288.802192\n",
       "76        77  3483.886715\n",
       "64        65   973.474698\n",
       "582      583  6501.770857\n",
       "52        53  1360.411842\n",
       "293      294  4475.919602\n",
       "389      390  3712.297464\n",
       "443      444  5087.978151\n",
       "470      471  6022.290978\n",
       "261      262  4212.557246\n",
       "279      280  5219.018637\n",
       "252      253  5183.518652\n",
       "483      484  5332.513237\n",
       "118      119  4119.326262\n",
       "566      567  5481.372628\n",
       "688      689  4780.359670\n",
       "266      267  5149.130305\n",
       "504      505  7295.980083\n",
       "239      240  4330.497972\n",
       "\n",
       "[147 rows x 2 columns]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 147 entries, 196 to 239\n",
      "Data columns (total 2 columns):\n",
      "instant    147 non-null int64\n",
      "cnt        147 non-null float64\n",
      "dtypes: float64(1), int64(1)\n",
      "memory usage: 3.4 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
